package com.analysis.utils;

import java.nio.charset.StandardCharsets;

/**
 * 字符编码工具类
 * 用于处理字符编码相关的问题
 */
public class EncodingUtils {
    
    /**
     * 检测字符串是否为UTF-8编码
     * 
     * @param text 待检测的字符串
     * @return 是否为UTF-8编码
     */
    public static boolean isUtf8(String text) {
        if (text == null) {
            return true;
        }
        
        try {
            byte[] bytes = text.getBytes(StandardCharsets.UTF_8);
            String decoded = new String(bytes, StandardCharsets.UTF_8);
            return text.equals(decoded);
        } catch (Exception e) {
            return false;
        }
    }
    
    /**
     * 修复可能的编码问题
     * 
     * @param text 待修复的字符串
     * @return 修复后的字符串
     */
    public static String fixEncoding(String text) {
        if (text == null) {
            return null;
        }
        
        try {
            // 如果字符串包含乱码，尝试重新编码
            if (containsGarbledText(text)) {
                // 尝试从ISO-8859-1重新解码为UTF-8
                byte[] bytes = text.getBytes(StandardCharsets.ISO_8859_1);
                return new String(bytes, StandardCharsets.UTF_8);
            }
            return text;
        } catch (Exception e) {
            return text;
        }
    }
    
    /**
     * 检测字符串是否包含乱码
     * 
     * @param text 待检测的字符串
     * @return 是否包含乱码
     */
    public static boolean containsGarbledText(String text) {
        if (text == null) {
            return false;
        }
        
        // 检测常见的乱码模式
        return text.contains("ä½") || 
               text.contains("æ") || 
               text.contains("å") || 
               text.contains("ç") || 
               text.contains("è") || 
               text.contains("é") || 
               text.contains("ê") || 
               text.contains("ë") || 
               text.contains("ì") || 
               text.contains("í") || 
               text.contains("î") || 
               text.contains("ï") || 
               text.contains("ð") || 
               text.contains("ñ") || 
               text.contains("ò") || 
               text.contains("ó") || 
               text.contains("ô") || 
               text.contains("õ") || 
               text.contains("ö") || 
               text.contains("÷") || 
               text.contains("ø") || 
               text.contains("ù") || 
               text.contains("ú") || 
               text.contains("û") || 
               text.contains("ü") || 
               text.contains("ý") || 
               text.contains("þ") || 
               text.contains("ÿ");
    }
    
    /**
     * 安全地转换字符串编码
     * 
     * @param text 原始字符串
     * @param fromCharset 源编码
     * @param toCharset 目标编码
     * @return 转换后的字符串
     */
    public static String convertEncoding(String text, String fromCharset, String toCharset) {
        if (text == null) {
            return null;
        }
        
        try {
            byte[] bytes = text.getBytes(fromCharset);
            return new String(bytes, toCharset);
        } catch (Exception e) {
            return text;
        }
    }
}
